package mainPackage;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Vector;

import correctionPackage.Correcteur;
import reseauPackage.Perceptron;

public class TesteurOR 
{
	private Perceptron p ;
	private int iter ;

	public TesteurOR(Perceptron p, int iter) 
	{
		this.p = p;
		this.iter= iter ;
	}
	
	private void tableVerite(FileWriter out)
	{
		String s ="";
		
		Vector<Double> signalDepart = new Vector<Double>();
		Vector<Double> signalArrivee = new Vector<Double>();
		
		signalArrivee.clear();
		signalDepart.clear();
		signalDepart.add(0.0);
		signalDepart.add(0.0);
		p.propagerSignal(signalDepart);
		signalArrivee = p.calculerValeursSortie() ;
		
		s += "# 0 - 0  =  " + signalArrivee.get(0) +"\n"; 
		
		
		signalArrivee.clear();
		signalDepart.clear();
		signalDepart.add(0.0);
		signalDepart.add(1.0);
		p.propagerSignal(signalDepart);
		signalArrivee = p.calculerValeursSortie() ;
		
		s += "# 0 - 1  =  "+ signalArrivee.get(0)  +"\n"; 

		
		signalArrivee.clear();
		signalDepart.clear();
		signalDepart.add(1.0);
		signalDepart.add(0.0);
		p.propagerSignal(signalDepart);
		signalArrivee = p.calculerValeursSortie() ;
		
		s += "# 1 - 0  =  "+ signalArrivee.get(0) +"\n"; 

		
		
		
		signalArrivee.clear();
		signalDepart.clear();
		signalDepart.add(1.0);
		signalDepart.add(1.0);
		p.propagerSignal(signalDepart);
		signalArrivee = p.calculerValeursSortie() ;
		
		s += "# 1 - 1  =  "+ signalArrivee.get(0)  +"\n"; 

		
		try 
		{
			out.write(s);
		}
		catch (IOException e) 
		{
			e.printStackTrace();
		}
		
	}
	
	public void test()
	{
		File f1 = new File("OR.dat");
		FileWriter out = null ;
		try 
		{
			out = new FileWriter(f1);
		}
		catch (IOException e1) 
		{
			e1.printStackTrace();
		}
		
		Correcteur correcteur = new Correcteur(p);
		
		
		Vector<Double> signalDepart = new Vector<Double>();
		Vector<Double> signalArrivee = new Vector<Double>();
		Vector<Double> signalAttendu = new Vector<Double>();
		
		int cp = 0 ;
		for( int i = 0 ; i < iter ; i++)
		{
			signalDepart.clear();
			signalDepart.add(1.0);
			signalDepart.add(1.0);
			p.propagerSignal(signalDepart);
			
			signalArrivee.clear();
			signalArrivee = p.calculerValeursSortie() ;
			
			signalAttendu.clear();
			signalAttendu.add(1.0);
			
			correcteur.corriger(signalAttendu);
			double erreur = p.calculerErreurCarre(signalAttendu);
			System.out.println("erreur : "+erreur);
			try 
			{
				out.write("# signal recu = "+signalArrivee.get(0)+" signal attendu = "+signalAttendu.get(0)+"\n");
				out.write(cp+","+erreur+"\n");cp++;
			} catch (IOException e) {e.printStackTrace();}
			
			
			signalDepart.clear();
			signalDepart.add(0.0);
			signalDepart.add(0.0);
			p.propagerSignal(signalDepart);
			
			signalArrivee.clear();
			signalArrivee = p.calculerValeursSortie() ;
			
			signalAttendu.clear();
			signalAttendu.add(0.0);
			
			correcteur.corriger(signalAttendu);
			erreur = p.calculerErreurCarre(signalAttendu);
			System.out.println("erreur : "+erreur);
			try 
			{
				out.write("# signal recu = "+signalArrivee.get(0)+" signal attendu = "+signalAttendu.get(0)+"\n");
				out.write(cp+","+erreur+"\n");cp++;
			} catch (IOException e) {e.printStackTrace();}		
			
			signalDepart.clear();
			signalDepart.add(1.0);
			signalDepart.add(0.0);
			p.propagerSignal(signalDepart);
			
			signalArrivee.clear();
			signalArrivee = p.calculerValeursSortie() ;
			
			signalAttendu.clear();
			signalAttendu.add(1.0);

			correcteur.corriger(signalAttendu);
			erreur = p.calculerErreurCarre(signalAttendu);
			System.out.println("erreur : "+erreur);
			try 
			{
				out.write("# signal recu = "+signalArrivee.get(0)+" signal attendu = "+signalAttendu.get(0)+"\n");
				out.write(cp+","+erreur+"\n");cp++;
			} catch (IOException e) {e.printStackTrace();}			
			
			signalDepart.clear();
			signalDepart.add(0.0);
			signalDepart.add(1.0);
			p.propagerSignal(signalDepart);
			
			signalArrivee.clear();
			signalArrivee = p.calculerValeursSortie() ;
			
			signalAttendu.clear();
			signalAttendu.add(1.0);

			correcteur.corriger(signalAttendu);
			
			
			erreur = p.calculerErreurCarre(signalAttendu);
			System.out.println("erreur : "+erreur);
			try 
			{
				out.write("# signal recu = "+signalArrivee.get(0)+" signal attendu = "+signalAttendu.get(0)+"\n");
				out.write(cp+","+erreur+"\n");cp++;
			} catch (IOException e) {e.printStackTrace();}		}

		tableVerite(out);
		try 
		{
			out.close();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
	}
	

}
